<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 5.4.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"adoontheway.gitee.io","root":"/","scheme":"Muse","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":false,"show_result":false,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":true,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}};
  </script>

  <meta name="description" content="ocr的使用">
<meta property="og:type" content="article">
<meta property="og:title" content="每天进步一点点031 - 尝试一下OCR">
<meta property="og:url" content="https://adoontheway.gitee.io/2022/05/13/everydayprogress031/index.html">
<meta property="og:site_name" content="Ados">
<meta property="og:description" content="ocr的使用">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://adoontheway.gitee.io/2022/05/13/everydayprogress031/2.png">
<meta property="og:image" content="https://adoontheway.gitee.io/2022/05/13/everydayprogress031/3.png">
<meta property="og:image" content="https://adoontheway.gitee.io/2022/05/13/everydayprogress031/1.png">
<meta property="og:image" content="https://adoontheway.gitee.io/2022/05/13/everydayprogress031/4.png">
<meta property="article:published_time" content="2022-05-13T11:16:30.000Z">
<meta property="article:modified_time" content="2023-05-25T10:26:16.038Z">
<meta property="article:author" content="ado">
<meta property="article:tag" content="python">
<meta property="article:tag" content="hexo">
<meta property="article:tag" content="ocr">
<meta property="article:tag" content="pytorch">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://adoontheway.gitee.io/2022/05/13/everydayprogress031/2.png">

<link rel="canonical" href="https://adoontheway.gitee.io/2022/05/13/everydayprogress031/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-CN'
  };
</script>

  <title>每天进步一点点031 - 尝试一下OCR | Ados</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">Ados</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
      <p class="site-subtitle" itemprop="description">a fullstack game worker</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-fw fa-home"></i>首页</a>

  </li>
        <li class="menu-item menu-item-about">

    <a href="/about/" rel="section"><i class="fa fa-fw fa-user"></i>关于</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="fa fa-fw fa-tags"></i>标签</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>归档</a>

  </li>
  </ul>
</nav>




</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>

  <a href="https://github.com/adoontheway" class="github-corner" title="Follow me on GitHub" aria-label="Follow me on GitHub" rel="external nofollow noopener noreferrer" target="_blank"><svg width="80" height="80" viewbox="0 0 250 250" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"/><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"/><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"/></svg></a>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="https://adoontheway.gitee.io/2022/05/13/everydayprogress031/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.png">
      <meta itemprop="name" content="ado">
      <meta itemprop="description" content="me, robot.">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Ados">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          每天进步一点点031 - 尝试一下OCR
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>

              <time title="创建时间：2022-05-13 19:16:30" itemprop="dateCreated datePublished" datetime="2022-05-13T19:16:30+08:00">2022-05-13</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                <span class="post-meta-item-text">更新于</span>
                <time title="修改时间：2023-05-25 18:26:16" itemprop="dateModified" datetime="2023-05-25T18:26:16+08:00">2023-05-25</time>
              </span>

          
            <span class="post-meta-item" title="阅读次数" id="busuanzi_container_page_pv" style="display: none;">
              <span class="post-meta-item-icon">
                <i class="fa fa-eye"></i>
              </span>
              <span class="post-meta-item-text">阅读次数：</span>
              <span id="busuanzi_value_page_pv"></span>
            </span>
            <div class="post-description">ocr的使用</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <h1 id="Preface"><a href="#Preface" class="headerlink" title="Preface"></a>Preface</h1><p>最近在改爬虫的bug。<br>今天先是搞定了 <em>cookie_jar</em> 不生效的问题，<br>接下来的问题就包括了图片验证码的识别，<br>所以要用到<em>ocr</em>。</p>
<blockquote>
<p><em>OCR</em> Optical Character Recognition</p>
</blockquote>
<h1 id="Contents"><a href="#Contents" class="headerlink" title="Contents"></a>Contents</h1><h2 id="选型"><a href="#选型" class="headerlink" title="选型"></a>选型</h2><p><strong>Gayhub</strong> 上搜索 <em>ocr</em>，然后编程语言过限定 <em>Python</em>。<br>排名第一的飞桨的OCR，还要训练，因为电脑不好，也是因为懒，所以排除了；<br>排名第三的是一个叫做EasyOCR的东西，叫Easy的一般都很容易吧，搞起。</p>
<h2 id="整起"><a href="#整起" class="headerlink" title="整起"></a>整起</h2><p>仔细阅读Readme，第一步安装，然后note，需要pytorch，我了个去。<br>来都来了，去找别的也麻烦，就这个吧，选择困难综合症的最有效良药就是：来都来了，将就一下吧</p>
<h3 id="安装pytorch与torchvision"><a href="#安装pytorch与torchvision" class="headerlink" title="安装pytorch与torchvision"></a>安装pytorch与torchvision</h3><p>依照pytorch官网的指引，下载了cuda支持windows和使用gpu的版本。<br>选完就后悔了，我的垃圾显卡，选GPU不是多余么？<br>但是，来都来的….</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch</span><br></pre></td></tr></table></figure>
<p>等待过程是漫长的，因为</p>
<ul>
<li>cudatoolkit 545MB</li>
<li>pytorch   1.23GB<br>还HTTP error了</li>
</ul>
<h3 id="安装EasyOCR"><a href="#安装EasyOCR" class="headerlink" title="安装EasyOCR"></a>安装EasyOCR</h3><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda search easyocr</span><br></pre></td></tr></table></figure>
<p>找不到，</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda search ocr</span><br></pre></td></tr></table></figure>
<p>也找不到，也就是这个没有发布到anaconda上，还是老老实实的用<code>pip</code>安装吧。  </p>
<p>在pytorch还在下载的时候，顺便开下命令行，下载easyocr.</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">conda activate crawler</span><br><span class="line">pip install easyocr</span><br></pre></td></tr></table></figure>

<h3 id="Code-amp-Result"><a href="#Code-amp-Result" class="headerlink" title="Code &amp; Result"></a>Code &amp; Result</h3><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> easyocr</span><br><span class="line"><span class="keyword">import</span> os </span><br><span class="line">os.environ[<span class="string">&#x27;KMP_DUPLICATE_LIB_OK&#x27;</span>]=<span class="string">&#x27;True&#x27;</span></span><br><span class="line">reader = easyocr.Reader([<span class="string">&#x27;en&#x27;</span>])</span><br><span class="line"><span class="comment"># 人工解析以及预期的结果</span></span><br><span class="line">expected = [<span class="string">&#x27;pppn&#x27;</span>,<span class="string">&#x27;gaac&#x27;</span>,<span class="string">&#x27;peuf&#x27;</span>,<span class="string">&#x27;gtdb&#x27;</span>,<span class="string">&#x27;qeat&#x27;</span>,<span class="string">&#x27;dphc&#x27;</span>,<span class="string">&#x27;i7u2&#x27;</span>,<span class="string">&#x27;8nui&#x27;</span>,<span class="string">&#x27;4q7f&#x27;</span>,<span class="string">&#x27;jj3d&#x27;</span>]</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>,<span class="number">11</span>):</span><br><span class="line">    filename = <span class="string">&#x27;./ocr/res/&#123;&#125;.png&#x27;</span>.<span class="built_in">format</span>(i)</span><br><span class="line">    result = reader.readtext(filename,detail=<span class="number">0</span>)</span><br><span class="line">    <span class="built_in">print</span>(expected[i-<span class="number">1</span>],<span class="string">&#x27;------&#x27;</span>,result)</span><br></pre></td></tr></table></figure>
<p>结果输出如下：<br><img data-src="./2.png" alt="结果输出"></p>
<p><img data-src="./3.png" alt="资源"><br>看起来结果偏差还是很大的，后续研究一下有没有什么可以优化的地方以得到想要的结果。</p>
<h2 id="Problems"><a href="#Problems" class="headerlink" title="Problems"></a>Problems</h2><h3 id="15-Initializing-libiomp5md-dll-but-found-libiomp5md-dll-already-initialized"><a href="#15-Initializing-libiomp5md-dll-but-found-libiomp5md-dll-already-initialized" class="headerlink" title="#15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized"></a>#15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized</h3><blockquote>
<p>OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.<br>OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information, please see <a target="_blank" rel="external nofollow noopener noreferrer" href="http://www.intel.com/software/products/support/">http://www.intel.com/software/products/support/</a>.<br><code>libiomp5md.dll</code> 重复了。</p>
</blockquote>
<p>上面提醒的是重复可能会影响性能或者导致错误的结果。</p>
<figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> os </span><br><span class="line">os.environ[<span class="string">&#x27;KMP_DUPLICATE_LIB_OK&#x27;</span>]=<span class="string">&#x27;True&#x27;</span></span><br></pre></td></tr></table></figure>
<p>在代码中加入以上代码已允许重复。<br>但是运行的时候还是报这个错。</p>
<p>去对应的<em>conda</em> <em>env</em> 中搜索此库。<br>搜索到了2个，一个位于 <code>anaconda3/envs/crawler/Lib/site-packages/**</code>下面,<br>另一个位于 <code>anaconda3/envs/crawler/Library/bin</code>下面，将这个库的加上一个随便的后缀 <code>.bak</code> 以让它失效。<br><img data-src="./1.png" alt="修改后的样子"></p>
<h2 id="hexo-jsdelivr-加载不到的问题"><a href="#hexo-jsdelivr-加载不到的问题" class="headerlink" title="hexo jsdelivr 加载不到的问题"></a>hexo jsdelivr 加载不到的问题</h2><p>写此文的时候，<code>hexo</code> 加载不了 <code>cdn.jsdelivr</code> 上托管的 <em>js</em> 库， 搜索后发现此域名已经改为托管到 <em>cloudflare</em> 下了。<br>需要将域名替换为 <code>fastly.jsdelivr.net</code> 就可以了。</p>
<p>需要替换的文件为 <code>themes/hexo-theme-next/layout/_script/vendors.swig</code>,如下：<br><img data-src="./4.png" alt="jsdelivr"></p>
<h1 id="Reference"><a href="#Reference" class="headerlink" title="Reference"></a>Reference</h1><ul>
<li><a target="_blank" rel="external nofollow noopener noreferrer" href="https://github.com/JaidedAI/EasyOCR">github.com/JaidedAI/EasyOCR</a></li>
<li><a target="_blank" rel="external nofollow noopener noreferrer" href="https://pytorch.org/">pytorch.org</a></li>
<li><a target="_blank" rel="external nofollow noopener noreferrer" href="https://blog.csdn.net/m0_50736744/article/details/121799432">解决OMP: Error #15</a></li>
</ul>

    </div>

    
    
    

      <footer class="post-footer">
          <div class="post-tags">
              <a href="/tags/python/" rel="tag"># python</a>
              <a href="/tags/hexo/" rel="tag"># hexo</a>
              <a href="/tags/ocr/" rel="tag"># ocr</a>
              <a href="/tags/pytorch/" rel="tag"># pytorch</a>
          </div>

        


        
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/2022/03/27/everydayprogress030/" rel="prev" title="每天进步一点点030 - 最近使用Python的一些笔记">
      <i class="fa fa-chevron-left"></i> 每天进步一点点030 - 最近使用Python的一些笔记
    </a></div>
      <div class="post-nav-item">
    <a href="/2023/04/04/everydayprogress033/" rel="next" title="每天进步一点点033 - 搭一下 Stable Diffusion WebUI">
      每天进步一点点033 - 搭一下 Stable Diffusion WebUI <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#Preface"><span class="nav-number">1.</span> <span class="nav-text">Preface</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#Contents"><span class="nav-number">2.</span> <span class="nav-text">Contents</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#%E9%80%89%E5%9E%8B"><span class="nav-number">2.1.</span> <span class="nav-text">选型</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%95%B4%E8%B5%B7"><span class="nav-number">2.2.</span> <span class="nav-text">整起</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#%E5%AE%89%E8%A3%85pytorch%E4%B8%8Etorchvision"><span class="nav-number">2.2.1.</span> <span class="nav-text">安装pytorch与torchvision</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E5%AE%89%E8%A3%85EasyOCR"><span class="nav-number">2.2.2.</span> <span class="nav-text">安装EasyOCR</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Code-amp-Result"><span class="nav-number">2.2.3.</span> <span class="nav-text">Code &amp; Result</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#Problems"><span class="nav-number">2.3.</span> <span class="nav-text">Problems</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#15-Initializing-libiomp5md-dll-but-found-libiomp5md-dll-already-initialized"><span class="nav-number">2.3.1.</span> <span class="nav-text">#15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#hexo-jsdelivr-%E5%8A%A0%E8%BD%BD%E4%B8%8D%E5%88%B0%E7%9A%84%E9%97%AE%E9%A2%98"><span class="nav-number">2.4.</span> <span class="nav-text">hexo jsdelivr 加载不到的问题</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#Reference"><span class="nav-number">3.</span> <span class="nav-text">Reference</span></a></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image" alt="ado" src="/images/avatar.png">
  <p class="site-author-name" itemprop="name">ado</p>
  <div class="site-description" itemprop="description">me, robot.</div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">94</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
          
        <span class="site-state-item-count">60</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>
  <div class="links-of-author motion-element">
      <span class="links-of-author-item">
        <a href="https://github.com/adoontheway" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;adoontheway" rel="external nofollow noopener noreferrer" target="_blank"><i class="fa fa-fw fa-github"></i>GitHub</a>
      </span>
      <span class="links-of-author-item">
        <a href="https://gitee.com/adoontheway" title="Gitee → https:&#x2F;&#x2F;gitee.com&#x2F;adoontheway" rel="external nofollow noopener noreferrer" target="_blank"><i class="fa fa-fw fa-github"></i>Gitee</a>
      </span>
      <span class="links-of-author-item">
        <a href="http://cnblogs.com/adoontheway" title="Cnblogs → http:&#x2F;&#x2F;cnblogs.com&#x2F;adoontheway" rel="external nofollow noopener noreferrer" target="_blank"><i class="fa fa-fw fa-cnblogs"></i>Cnblogs</a>
      </span>
      <span class="links-of-author-item">
        <a href="https://legacy.gitbook.com/@adobeattheworld" title="Gitbook → https:&#x2F;&#x2F;legacy.gitbook.com&#x2F;@adobeattheworld" rel="external nofollow noopener noreferrer" target="_blank"><i class="fa fa-fw fa-gitbook"></i>Gitbook</a>
      </span>
  </div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2023</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">ado</span>
</div>
  <div class="powered-by">由 <a href="https://hexo.io/" class="theme-link" rel="external nofollow noopener noreferrer" target="_blank">Hexo</a> & <a href="https://muse.theme-next.org/" class="theme-link" rel="external nofollow noopener noreferrer" target="_blank">NexT.Muse</a> 强力驱动
  </div>



        
<div class="busuanzi-count">
  <script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
    <span class="post-meta-item" id="busuanzi_container_site_uv" style="display: none;">
      <span class="post-meta-item-icon">
        <i class="fa fa-user"></i>
      </span>
      <span class="site-uv" title="总访客量">
        <span id="busuanzi_value_site_uv"></span>
      </span>
    </span>
    <span class="post-meta-divider">|</span>
    <span class="post-meta-item" id="busuanzi_container_site_pv" style="display: none;">
      <span class="post-meta-item-icon">
        <i class="fa fa-eye"></i>
      </span>
      <span class="site-pv" title="总访问量">
        <span id="busuanzi_value_site_pv"></span>
      </span>
    </span>
</div>








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="//fastly.jsdelivr.net/npm/lozad@1/dist/lozad.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/muse.js"></script>


<script src="/js/next-boot.js"></script>




  











<script>
document.querySelectorAll('.pdfobject-container').forEach(element => {
  let url = element.dataset.target;
  let pdfOpenParams = {
    navpanes : 0,
    toolbar  : 0,
    statusbar: 0,
    pagemode : 'thumbs',
    view     : 'FitH'
  };
  let pdfOpenFragment = '#' + Object.entries(pdfOpenParams).map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join('&');
  let fullURL = `/lib/pdf/web/viewer.html?file=${encodeURIComponent(url)}${pdfOpenFragment}`;

  if (NexT.utils.supportsPDFs()) {
    element.innerHTML = `<embed class="pdfobject" src="${url + pdfOpenFragment}" type="application/pdf" style="height: ${element.dataset.height};">`;
  } else {
    element.innerHTML = `<iframe src="${fullURL}" style="height: ${element.dataset.height};" frameborder="0"></iframe>`;
  }
});
</script>


<script>
if (document.querySelectorAll('pre.mermaid').length) {
  NexT.utils.getScript('//unpkg.com/mermaid@8.14.0/dist/mermaid.min.js', () => {
    mermaid.initialize({
      theme    : '',
      logLevel : 3,
      flowchart: { curve     : 'linear' },
      gantt    : { axisFormat: '%m/%d/%Y' },
      sequence : { actorMargin: 50 }
    });
  }, window.mermaid);
}
</script>


  

  

</body>
</html>
